#ifndef __MCD_RENDERADV_DX11_DX11SHADERS__
#define __MCD_RENDERADV_DX11_DX11SHADERS__

#include "../ShareLib.h"
#include "Dx11IncludeFwd.h"

namespace MCD
{

	class MCD_RENDERADV_API Dx11Shaders
	{
	public:
		static ID3DBlob* compile(
			const char* srcData,
			size_t srcSize,
			const char* name,
			const char* entryPoint,
			const char* target
			);

		static ID3D11VertexShader* createVertexShader(ID3DBlob* byteCode);

		static ID3D11PixelShader* createPixelShader(ID3DBlob* byteCode);

		static const char* getBestVertexShaderTarget();
		static const char* getBestPixelShaderTarget();
		
	};	// Dx11Shaders

	class MCD_RENDERADV_API Dx11ShaderConstants
	{
	public:
		Dx11ShaderConstants(sal_notnull ID3DBlob* shaderByteCode);
		~Dx11ShaderConstants();

		size_t count() const;

		void write(sal_notnull const char* name, sal_notnull void* dataPtr, size_t dataSize);

		void bindVS();
		void bindGS();
		void bindPS();

	private:
		class Impl;
		Impl* mImpl;
	};

}	// namespace MCD

#endif	// __MCD_RENDERADV_DX11_DX11SHADERS__